home *** CD-ROM | disk | FTP | other *** search
- {
- {TITLE: Plasma FROM: Kaare Boeegh DATE: Sun Apr 17 1994 08:25 pm}
- {$A+,B-,D-,E-,F+,G+,I-,L-,N-,O-,R-,S-,V-,X-}
- PROGRAM plasma;
-
- CONST ys : BYTE = 0;
- yt : BYTE = 255;
-
- VAR ft : ARRAY [0..512] OF BYTE;
- sint : ARRAY [0..256] OF BYTE;
- i1,a,b,d,c,od,color,e,y : BYTE;
- x,k,i : WORD;
-
- PROCEDURE do_tables;
- VAR i : WORD;
- BEGIN
- FOR i := 0 TO 512 DO FT [i] := ROUND(64+63*SIN(i/40.74));
- FOR i := 0 TO 256 DO SINT [i] := ROUND(128+127*SIN(i/40.74))-1;
- END;
-
- PROCEDURE do_palette;
- VAR i : WORD;
- BEGIN
- PORT[$3C8] := 0;
- FOR i := 0 TO 255 DO
- BEGIN
- PORT[$3C9] := i DIV 4;
- PORT[$3C9] := i DIV 6;
- PORT[$3C9] := i DIV 8;
- END;
- END;
-
- BEGIN
- ASM
- mov al,ys
- mov y,al
- mov ax,0013h;
- int 10h; {Set Mode $13}
-
- mov dx,3d4h {Go into Double Height Pixel Mode}
- mov al,9
- out dx,al
- inc dx
- in al,dx
- and al,0e0h
- add al,3
- out dx,al
-
- call do_palette;
- call do_tables;
-
- @3: inc i1 {Main Loop} {Grid Counter}
- sub c,2
- inc od
- mov al,od
- mov d,al
-
- mov al,ys {Alternate Starting Position every pass}
- mov ah,yt
- xchg al,ah
- mov ys,al
- mov ah,yt
- mov y,al
-
- @2: mov al,y {Calculate Offset and add one every second line}
- mov bx,320
- mul bx
- mov bx,ax
- mov al,y
- mov ah,0
- and al,1
- add ax,bx
- mov k,ax
-
- mov al,i1 {move grid one pixel down every second frame}
- mov ah,0
- and al,1
- mov ah,0
- mov bx,320
- mul bx
-
- mov bx,k
- sub bx,ax
- mov k,bx
-
- mov al,d
- add al,2
- mov d,al
-
- mov al,c {[(c}
- add al,y {+y)}
- and ax,255 {and 255]}
- mov di,offset sint {get sint mem location}
- add di,ax {[c+y] and 255}
- mov al,ds:[di] {sint[(c+y) and 255]}
- mov a,al
-
- mov di,offset sint
- mov al,d
- and al,255
- add di,ax
- mov al,ds:[di]
- mov b,al
-
- mov ax,0
- mov bx,0
- mov cx,0
-
- @1: mov di,offset ft {get ft mem location}
- mov al,a {a}
- add al,b {+b}
- add di,ax {[a+b]}
- mov al,ds:[di] {ft[a+b]}
- mov bx,ax {Store}
- inc bx {+1}
- mov di,offset ft {get ft mem location}
- mov al,y {y}
- add al,b {+b}
- add di,ax {[y+b]}
- mov ax,ds:[di] {ft[y+b]}
- add ax,bx {+}
- mov color,al {color:=}
-
- mov bx,0a000h {screen memory location}
- mov es,bx {mov it to es}
- mov di,k {k is screen offset}
-
-
- mov es:[di+80],al {plot color to screen}
- { ^^ center}
- mov al,b
- add al,2
- mov b,al
-
- mov ax,k {Ofs of Plasma Pixel, Increased by 2 to Create the Grid}
- add ax,2
- mov k,ax
-
- mov ah,0 {INC(a,1+color SHR 7);}
- mov al,color
- shr al,7
- add al,1
- mov ah,0
- mov bl,al
- mov al,a
- add al,bl
- mov a,al
-
- inc cx
- cmp cx,80 {160}
- jnz @1 {inner loop}
-
- inc y
- cmp y,101
- jnz @2 {outer loop, number of lines}
-
- mov ah,01h
- int 16h
- jz @3 {get keypress}
-
- mov ax,03h {mode 3}
- int 10h
- END;
- END.
- -----------------------------------------------------------------------------
- Shipley
- --- Synchronet
- * Origin: The Brook Forest Inn [714] 951-5282 (1:103/950)
-